package cn.yhjz.platform.system.service;

import cn.yhjz.common.Pager;
import cn.yhjz.platform.system.entity.SysUser;
import cn.yhjz.platform.system.vo.SysMenuVo;
import cn.yhjz.platform.system.vo.SysUserVo;

import java.util.List;

public interface ISysUserService {
    List<SysMenuVo> getUserMenuList(SysUser sysUser);


    /**
     * 分页查询
     *
     * @param sysUser
     * @return
     */
    Pager getPage(Long currentPage, Long pageSize, SysUser sysUser);

    /**
     * 新增
     *
     * @param sysUser
     * @return
     */
    SysUser insert(SysUser sysUser);

    /**
     * 查询
     *
     * @param sysUser
     * @return
     */
    List<SysUser> select(SysUser sysUser);

    /**
     * 查询Vo
     *
     * @param sysUser
     * @return
     */
    List<SysUserVo> selectVo(SysUser sysUser);

    /**
     * 查询
     *
     * @param sysUser
     * @return
     */
    SysUser selectOne(SysUser sysUser);

    /**
     * 查询
     *
     * @param sysUser
     * @return
     */
    SysUserVo selectOneVo(SysUser sysUser);

    /**
     * 根据id查询
     *
     * @param id
     * @return
     */
    SysUser selectById(Long id);

    /**
     * 根据id删除
     *
     * @param id
     * @return
     */
    int deleteById(Long id);

    /**
     * 用户管理中更新用户信息，可以清空用户的部门
     *
     * @param sysUser
     * @return
     */
    int updateUserInfoById(SysUser sysUser);

    /**
     * 根据id更新
     *
     * @param sysUser
     * @return
     */
    int updateById(SysUser sysUser);

    /**
     * 根据id更新，更新所有字段，包括值为null的字段
     *
     * @param sysUser
     * @return
     */
    int updateByIdWithNull(SysUser sysUser);

    /**
     * 根据条件更新，跳过值为null的字段
     *
     * @param entity
     * @param param
     * @return
     */
    int update(SysUser entity, SysUser param);

    /**
     * 根据条件更新，更新所有字段，包括值为null的字段
     *
     * @param entity
     * @param param
     * @return
     */
    int updateWithNull(SysUser entity, SysUser param);

    /**
     * 还原密码
     *
     * @param id
     * @param password
     * @return
     */
    int resetPassword(Long id, String password);
}
